/**
 * 路由初始化模块
 */
import { useUserStore } from '@/stores'
import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
// 导入路由规则
import { routes } from './routes'

// 1. 创建路由实例
// vue2: new Router({})
// vue3: createRouter({})
const router = createRouter({
  // vue2: mode:hash | history
  // == vue3: 控制路由模式 =》1. hash哈希 2. history ==
  // 1. createWebHistory函数设置路由模式为history
  history: createWebHistory(import.meta.env.BASE_URL),
  // 2. createWebHashHistory函数设置哈希默认路由hash

  /**
   * 说明：项目部署=》项目开发完了，打包=》dist目录
   * 1. 把dist代码放到服务器根目录（root）=> import.meta.env.BASE_URL 不需要设置
   * 2. 没有把dist代码放到服务器根目录（root）=》例如：放到root/consult-h5 => vite.config.ts  添加配置=>base: /consult-h5/
   */
  // history: createWebHashHistory(import.meta.env.BASE_URL),
  // 说明：配置路由规则数组
  routes
})

// 添加路由前置守卫=》页面的访问控制
/**
 * vue2:to去哪 from 从哪来 next函数=》放行
 * vue3:to去哪 from 从哪来
 */
router.beforeEach((to, from) => {
  // console.log('访问页面前：', to, from)
  // 修改网页title
  document.title = `问诊-${to.meta.title}`
  // return false // 阻止页面访问
  // return true | 不返回值 // 放行
  /**
   * 需求：根据是否有token
   * 1. 有token => 放行
   * 2. 没有token => 跳回登录页
   * 例外：登录、注册等不需要有token就能访问=》vip用户（白名单）
   */
  // 1. 获取用户store
  const store = useUserStore()
  const vips = ['/login', '/reg']
  // 2. 判断没有token，而且不是vip就跳回登录页
  // 说明：return '/login'跳到登录页
  if (!store.user.token && !vips.includes(to.path)) return '/login'
})

// 2. 导出实例
export default router
